package io.adrainty.bolee.framework.commons.utils;

import io.adrainty.bolee.framework.commons.basic.TreeDTO;
import io.adrainty.bolee.framework.commons.basic.TreeItemDTO;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * @author AdRainty
 * @version V1.0.0
 * @since 2025/8/11 下午11:48
 */
public class TreeItemUtil {

    private TreeItemUtil() {}

    /**
     * 树形结构返回
     * @param checkedIds 选中ID
     * @param expandedIds 展开ID
     * @param treeItemDTOList 树形结构数据
     * @return TreeDTO
     */
    public static TreeDTO returnTreeDTO(List<String> checkedIds, List<String> expandedIds,
                                        String parentNo, List<TreeItemDTO> treeItemDTOList) {
        // 分组
        Map<String, List<TreeItemDTO>> treeItemMap = treeItemDTOList.stream()
                .collect(Collectors.groupingBy(TreeItemDTO::getParentId));
        // 填充子结点
        treeItemDTOList.forEach(treeItemDTO -> {
            List<TreeItemDTO> childTreeItem = treeItemMap.getOrDefault(treeItemDTO.getId(), new ArrayList<>());
            treeItemDTO.setChildren(childTreeItem);
        });
        // 父结点
        List<TreeItemDTO> parentTreeItemDTOList = treeItemMap.get(parentNo);
        return TreeDTO.builder()
                .checkedIds(checkedIds)
                .expandedIds(expandedIds)
                .items(parentTreeItemDTOList)
                .build();
    }

}
